In the field of computing, a “cache” typically refers to a small, fast memory or storage device used to store data or instructions that were accessed recently, are accessed frequently, or are likely to be accessed in the future. Reading from or writing to a cache is typically cheaper (in terms of access time and/or resource utilization) than accessing other memory or storage devices. Once data is stored in cache, it can be accessed in cache instead of re-fetching and/or re-computing the data, saving both time and resources.
Caches are often provided as multi-level caches. For example, a caching system may include both a “primary” and “secondary” cache. When reading data, a computing system or device may first look for data in the primary cache and, if the data is absent, look for the data in the secondary cache. If the data is not in either cache, the computing system or device may retrieve the data from disk drives or other storage devices. When writing data, a computing system or device may write data to the primary cache. This data may eventually be destaged to the secondary cache or a storage device to make room in the primary cache.
Flash memory and other solid-state memory devices can potentially create caches with much larger storage capacities than those currently utilized. Creating larger caches has the potential to fundamentally change the manner in which caches are used. Thus, as cache storage capacity increases, conventional caching algorithms may become obsolete or inadequate as they may fail to efficiently utilize the additional space or take advantage of performance improvements that may be possible with larger caches. Thus, apparatus and methods are needed to more efficiently use larger caches, such as large secondary caches.
In view of the foregoing, what are needed are apparatus and methods to efficiently utilize large caches such as large secondary caches. Further needed are apparatus and methods to take advantage of performance improvements that are possible with larger secondary caches.